package br.com.petshow.dao;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.petshow.model.Tipos;
import br.com.petshow.utils.SqlField;

public class TiposDao extends GenericDao<Tipos> {

	public TiposDao() {
		setTableName("TIPOS");
		setSequenceName("SQ_ID_TIPOS");
	}
	
	@Override
	public void insertOrUpdate(Tipos o) throws SQLException {
		setFields(o);
		super.insertOrUpdate(o);
	}

	@Override
	public void delete(Tipos o) {
		super.delete(o);
	}
	
	private void setFields(Tipos o) {
		List<SqlField> fields = new ArrayList<SqlField>();

		SqlField nome = new SqlField("nome",o.getNome());
		fields.add(nome);
		
		setFieldsToInsertOrEdit(fields);
	}

	@Override
	public Tipos tratarRetorno(ResultSet rs) throws SQLException {
		Tipos tipo = new Tipos();
		rs.next();
		ResultSetMetaData rsmd = rs.getMetaData();
		
		for(int i = 1; i <= rsmd.getColumnCount(); i++) {
			switch (rsmd.getColumnName(i).toLowerCase()) {
			case "id":
				tipo.setId(rs.getInt("id"));
				break;
			case "nome":
				tipo.setNome(rs.getString("nome"));
				break;
			default:
				break;
			}
		}
		
		return tipo;
	}

	@Override
	public List<Tipos> tratarRetornoList(ResultSet rs) throws SQLException {
		List<Tipos> retorno = new ArrayList<Tipos>();
		
		while(rs.next()) {
			Tipos tipo = new Tipos();
			ResultSetMetaData rsmd = rs.getMetaData();
			
			for(int i = 1; i <= rsmd.getColumnCount(); i++) {
				switch (rsmd.getColumnName(i).toLowerCase()) {
				case "id":
					tipo.setId(rs.getInt("id"));
					break;
				case "nome":
					tipo.setNome(rs.getString("nome"));
					break;
				default:
					break;
				}
			}
			retorno.add(tipo);
		}

		return retorno;
	}

	
}
